サンプルプログラム > サンプルコード(Visual Basic.NET)
サンプルプログラム
サンプルコード(Visual Basic.NET)
ここで示されるサンプルはMicrosoft Visual Basic.NETを前提にしています。I/OライブラリにはVISA COM Softwareを使用するものとします。
VISA COM Softwareは当社ウェブサイトから「KI-VISA Library(3.0.x以降)」をダウンロードするか、National Instruments社のNI-VISA(VER.3.0 以降、Windows 2000およびWindows XPでは、VER.3.2以降)またはAgilent Technologies社のAgilent VISA(Agilent I/O Library M.01.00以降)を使用することができます。
それよりも古いバージョンのVISAではUSB機能を利用できないので注意してください。またUSB機能はWindows95およびNT3.5x/4.0では利用できません。
VISAセッションの取得と通信設定
下記のコードは、後述するすべてのサンプルプログラムに共通の部分です。本製品との通信をおこなう前に実行する必要があります。
変数strVisaAddressに代入するVISAリソース文字列は、GPIB/RS232C/USBによって書式が異なります。
GPIBの場合には、デバイスアドレスは5を前提にしています。
RS232Cの場合には、通信パラメータを19200bps、Data 8bits、Stop 1bit、Parity NONE、XFlowを前提にしています。本製品のインターフェース設定をこれらの値と合致するようにしてください。
USBの場合は本製品のインターフェース設定で詳細設定すべき項目はありませんが、VISAリソース文字列にUSB VID(ベンダーID)、PID(プロダクトID)、シリアル番号、を明示的に指定する必要があります。 VIDとPIDの値は、コンフィグ設定表示でも確認することができます。シリアル番号は、本製品後面パネルで確認することができます。
下記サンプルで使用するシリアル番号は一例です。
Imports Ivi.Visa.Interop
Public Class Form1
Inherits System.Windows.Forms.Form
Private ioMgr As IResourceManager
Private vi As IMessage
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Try
' 1st try is create Global Resource Manager (It may fail if Agilent VISA)
Dim progid_GRM As String = "VISA.GlobalRM" 'GRM prog-id
ioMgr = Activator.CreateInstance(Type.GetTypeFromProgID(progid_GRM))
Catch ex As Exception
' 2nd try is create Agilent Specific Resource Manager
Dim progid_ASRM As String = "AgilentRM.SRMCls" 'Agilent SRM prog-id
ioMgr = Activator.CreateInstance(Type.GetTypeFromProgID(progid_ASRM))
End Try
' Decide VISA address
Dim strVisaAddress As String
strVisaAddress = "GPIB0::5::INSTR"
'strVisaAddress = "ASRL1::INSTR"
'strVisaAddress = "USB0::0x0B3E::0x1009::AB123456::INSTR"
' Open VISA session
vi = ioMgr.Open(strVisaAddress, AccessMode.NO_LOCK, 0, "")
Select Case vi.HardwareInterfaceType
Case 4 ' RS232
Dim serial As ISerial = vi
serial.BaudRate = 19200
serial.DataBits = 8
serial.StopBits = SerialStopBits.ASRL_STOP_ONE
serial.Parity = SerialParity.ASRL_PAR_NONE
serial.FlowControl = SerialFlowControl.ASRL_FLOW_XON_XOFF
serial.EndIn = SerialEndConst.ASRL_END_TERMCHAR
serial.EndOut = SerialEndConst.ASRL_END_TERMCHAR
vi.IOProtocol = IOProtocol.PROT_4882_STRS
vi.WriteString(":SYST:REM")
Case 7 ' USB
vi.WriteString(":SYST:REM")
End Select
vi.Timeout = 3000
End Sub
'Form overrides dispose to clean up the component list.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
vi.Close()
End If
MyBase.Dispose(disposing)
End Sub
以降、VisaComのIMessageインターフェース(変数vi)を通じて本製品との通信をおこないます。
サンプルコード(AC出力の設定)
Dim noCulture As IFormatProvider = Globalization.CultureInfo.InvariantCulture
vi.WriteString("*RST") 'Resets the instrument
vi.WriteString(":OUTP:COUP AC") 'Selects AC coupling
vi.WriteString(":VOLT:RANG 135") 'Selects LOW (135V) range
Dim dVoltMin, dVoltMax As Double
vi.WriteString(":VOLT? MIN") 'Queries VOLT min
dVoltMin = Convert.ToDouble(vi.ReadString(256), noCulture)
vi.WriteString(":VOLT? MAX") 'Queries VOLT max
dVoltMax = Convert.ToDouble(vi.ReadString(256), noCulture)
Dim dFreqMin, dFreqMax As Double
vi.WriteString(":FREQ? MIN") 'Queries FREQ min
dFreqMin = Convert.ToDouble(vi.ReadString(256), noCulture)
vi.WriteString(":FREQ? MAX") 'Queries FREQ max
dFreqMax = Convert.ToDouble(vi.ReadString(256), noCulture)
vi.WriteString(":VOLT 110") 'Sets 110V
vi.WriteString(":FREQ 55") 'Sets 55Hz
vi.WriteString(":OUTP ON") 'Turns the output on
vi.WriteString(":SYST:ERR?") 'Queries instrument error
Dim strInstrErr As String = vi.ReadString(256)
サンプルコード(DC出力の設定)
Dim noCulture As IFormatProvider = Globalization.CultureInfo.InvariantCulture
vi.WriteString("*RST") 'Resets the instrument
vi.WriteString(":OUTP:COUP DC") 'Selects DC coupling
vi.WriteString(":VOLT:RANG 135") 'Selects LOW (135V) range
Dim dVoltMin, dVoltMax As Double
vi.WriteString(":VOLT:OFFS? MIN") 'Queries VOLT min
dVoltMin = Convert.ToDouble(vi.ReadString(256), noCulture)
vi.WriteString(":VOLT:OFFS? MAX") 'Queries VOLT max
dVoltMax = Convert.ToDouble(vi.ReadString(256), noCulture)
vi.WriteString(":VOLT:OFFS +40") 'Sets 40V
vi.WriteString(":OUTP ON") 'Turns the output on
vi.WriteString(":SYST:ERR?") 'Queries instrument error
Dim strInstrErr As String = vi.ReadString(256)
サンプルコード(出力変更トリガ)
vi.WriteString("*RST") 'Resets the instrument
vi.WriteString(":OUTP:COUP AC") 'Selects AC coupling
vi.WriteString(":VOLT:RANG 135") 'Selects LOW (135V) range
vi.WriteString(":VOLT 110") 'Sets 110V
vi.WriteString(":FREQ 55") 'Sets 55Hz
vi.WriteString(":OUTP ON") 'Turns the output on
vi.WriteString(":VOLT:MODE STEP") 'Selects STEP mode
vi.WriteString(":FREQ:MODE STEP") 'Selects STEP mode
vi.WriteString(":VOLT:TRIG 100") 'Sets 100V when triggered
vi.WriteString(":FREQ:TRIG 50") 'Sets 50Hz when triggered
vi.WriteString(":TRIG:SEQ1:SOUR BUS") 'Selects BUS trigger
vi.WriteString(":INIT:SEQ1") 'Initiates
vi.WriteString(":TRIG:SEQ1:IMM") 'Gives a trigger
vi.WriteString(":SYST:ERR?") 'Queries instrument error
Dim strInstrErr As String = vi.ReadString(256)
サンプルコード(簡単な測定)
Dim dVoltAC As Double
Dim dCurrAC As Double
Dim dCurrMax As Double
Dim dCurrMaxHold As Double
Dim dCurrCrestFactor As Double
Dim dPowACReal As Double
Dim dPowACApparent As Double
Dim dPowACReactive As Double
Dim dPowACPF As Double
Dim noCulture As IFormatProvider = Globalization.CultureInfo.InvariantCulture
' Query VOLT AC
vi.WriteString(":MEAS:VOLT:AC?")
dVoltAC = Convert.ToDouble(vi.ReadString(20), noCulture)
' Query CURR AC
vi.WriteString(":MEAS:CURR:AC?")
dCurrAC = Convert.ToDouble(vi.ReadString(20), noCulture)
' Query CURR Max
vi.WriteString(":MEAS:CURR:AMPL:MAX?")
dCurrMax = Convert.ToDouble(vi.ReadString(20), noCulture)
' Query CURR Max Hold
vi.WriteString(":MEAS:CURR:AMPL:MAX:HOLD?")
dCurrMaxHold = Convert.ToDouble(vi.ReadString(20), noCulture)
' Query CURR Crest Factor
vi.WriteString(":MEAS:CURR:CRES?")
dCurrCrestFactor = Convert.ToDouble(vi.ReadString(20), noCulture)
' Query POW AC Real
vi.WriteString(":MEAS:POW:AC:REAL?")
dPowACReal = Convert.ToDouble(vi.ReadString(20), noCulture)
' Query POW AC Apparent
vi.WriteString(":MEAS:POW:AC:APP?")
dPowACApparent = Convert.ToDouble(vi.ReadString(20), noCulture)
' Query POW AC Reactive
vi.WriteString(":MEAS:POW:AC:REAC?")
dPowACReactive = Convert.ToDouble(vi.ReadString(20), noCulture)
' Query POW AC Power Factor
vi.WriteString(":MEAS:POW:AC:PFAC?")
dPowACPF = Convert.ToDouble(vi.ReadString(20), noCulture)
サンプルコード(柔軟性のある測定)
Dim dVoltAC As Double
Dim dCurrAC As Double
Dim dCurrMax As Double
Dim dCurrMaxHold As Double
Dim dCurrCrestFactor As Double
Dim dPowACReal As Double
Dim dPowACApparent As Double
Dim dPowACReactive As Double
Dim dPowACPF As Double
Dim noCulture As IFormatProvider = Globalization.CultureInfo.InvariantCulture
' Set up OPC event causing SRQ generation
vi.WriteString("*ESE 1;*SRE 32;*CLS")
' Initiate a new measurement
vi.WriteString(":TRIG:SEQ3:SOUR IMM")
vi.WriteString(":INIT:SEQ3")
vi.WriteString("*OPC")
' Wait for SRQ generation
Dim iStb As Short
Do
iStb = vi.ReadSTB()
Loop While (iStb And &H40) = 0
' Query VOLT AC
vi.WriteString(":FETC:VOLT:AC?")
dVoltAC = Convert.ToDouble(vi.ReadString(20), noCulture)
' Query CURR AC
vi.WriteString(":FETC:CURR:AC?")
dCurrAC = Convert.ToDouble(vi.ReadString(20), noCulture)
' Query CURR Max
vi.WriteString(":FETC:CURR:AMPL:MAX?")
dCurrMax = Convert.ToDouble(vi.ReadString(20), noCulture)
' Query CURR Max Hold
vi.WriteString(":FETC:CURR:AMPL:MAX:HOLD?")
dCurrMaxHold = Convert.ToDouble(vi.ReadString(20), noCulture)
' Query CURR Crest Factor
vi.WriteString(":FETC:CURR:CRES?")
dCurrCrestFactor = Convert.ToDouble(vi.ReadString(20), noCulture)
' Query POW AC Real
vi.WriteString(":FETC:POW:AC:REAL?")
dPowACReal = Convert.ToDouble(vi.ReadString(20), noCulture)
' Query POW AC Apparent
vi.WriteString(":FETC:POW:AC:APP?")
dPowACApparent = Convert.ToDouble(vi.ReadString(20), noCulture)
' Query POW AC Reactive
vi.WriteString(":FETC:POW:AC:REAC?")
dPowACReactive = Convert.ToDouble(vi.ReadString(20), noCulture)
' Query POW AC Power Factor
vi.WriteString(":FETC:POW:AC:PFAC?")
dPowACPF = Convert.ToDouble(vi.ReadString(20), noCulture)